package mall.dao.handler.column;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.dbutils.ColumnHandler;

import mall.bean.OrderState;

/**
 * OrderState枚举型的列的值处理程序(在resultSet.getInt("state")的时候, 想办法把这个int转换为OrderState枚举)
 * <br>
 * 但是这个自定义的ColumnHandler要发挥作用, 需要在项目元信息META-INF/services/org.apache.commons.dbutils.ColumnHandler文件中进行注册, 不然dbutils库不知道我们做了这个事情
 * @author Administrator
 *
 */
public class OrderStateColumnHandler implements ColumnHandler {

	// 如果检查到实体类T的属性类型为OrderState枚举型的时候, 这个Handler才会生效, 才会调用下面的apply方法
	@Override
	public boolean match(Class<?> propType) {
		return propType.equals(OrderState.class);
	}

	// 把结果集rs中的第columnIndex个列的值读取出来, 转换成我们需要的OrderState枚举型
	// 这样才能把这个值通过setter赋给T对象的属性
	@Override
	public Object apply(ResultSet rs, int columnIndex) throws SQLException {
		int state = rs.getInt(columnIndex);
		// 把int型的值转换成枚举 ( 偷梁换柱 )
		return OrderState.parse(state);
	}

}
